#!/usr/bin/python
# -*- coding: iso-8859-15 -*-

import commands
import re

class IwList:
	def __init__(self,session):
		self.session=session
		self.su=[]
		self.u=""
		self.listdico=[]
		self.regex=""
		self.result_regex=""
		self.dico={}
	
		

	def iwList(self,param):
		# Lancement d' iWlist
		self.u=commands.getoutput('iwlist ' +param+' scanning' )
		#print self.u
		# découpage du resultat par Céllule et stocké sous forme de liste de dictionnaire avec utilisation de REGEX
		self.su=self.u.split("Cell")
		self.su.pop(0)	
		for element in self.su:
		  if element:	
			#print 'test LALALA:'+element	
			self.regex=re.compile('(Address): ([0-9a-fA-F]{2}:[0-9a-fA-F]{2}:[0-9a-fA-F]{2}:[0-9a-fA-F]{2}:[0-9a-fA-F]{2}:[0-9a-fA-F]{2}).*')
			self.result_regex=self.regex.findall(element)
			self.dico[self.result_regex[0][0]]=self.result_regex[0][1]
			
			self.regex=re.compile('(ESSID):(.*).*')
			self.result_regex=self.regex.findall(element)
			self.dico[self.result_regex[0][0]]=self.result_regex[0][1]
			if re.search('Protocol:',element):
				self.regex=re.compile('(Protocol):IEEE (802.11[abg]{1,2}).*')
				self.result_regex=self.regex.findall(element)
				self.dico[self.result_regex[0][0]]=self.result_regex[0][1]
			
			if re.search('Mode:',element):
				self.regex=re.compile('(Mode):([a-zA-Z]*).*')
				self.result_regex=self.regex.findall(element)
				self.dico[self.result_regex[0][0]]=self.result_regex[0][1]
			
			
			if re.search('Channel:',element):
				self.regex=re.compile('(Channel):([0-9]{1,2}).*')
				self.result_regex=self.regex.findall(element)
				self.dico[self.result_regex[0][0]]=self.result_regex[0][1]
			
			if re.search('Encryption key:',element):
				self.regex=re.compile('(Encryption key):([onfONF]{2,3}).*')
				self.result_regex=self.regex.findall(element)
				self.dico[self.result_regex[0][0]]=self.result_regex[0][1]
			# Partie avec cryptographie
			if self.result_regex[0][1]== 'on':
				#print 'TEST ON/OFF'+str(self.result_regex[0][1])
				if re.search('IE:',element):
				# on enleve tout ce qui est clef en Hexadecimal :	
					self.regex=re.compile('IE:((\s.*\s)*)E')
					self.result_regex=self.regex.findall(element)
					s = ' '.join(self.result_regex[0][0].split())
					s = s.replace(';',"")
					s= s.replace('Unknown',"")
					s= s.replace('IE',"")
					self.regex=re.compile('[A-Z|0-9 :]*: (W.*)')
					self.result_regex=self.regex.findall(s)

					# On se contente juste du type de cryptographie pour plus de clarte :
					if self.result_regex :
						self.regex=re.compile('[A-Z|0-9 :]*: (802\.1x).*')
						self.result_regex2=self.regex.findall(self.result_regex[0])
						if self.result_regex2 :
							self.dico['Parametres cryptographiques']=self.result_regex2[0]
						else :
						
							self.regex=re.compile('[A-Z|0-9 :]*: (PSK).*')
							self.result_regex3=self.regex.findall(self.result_regex[0])
							if self.result_regex3 :
								self.dico['Parametres cryptographiques']=self.result_regex3[0]
							else :
								self.dico['Parametres cryptographiques']=self.result_regex[0]				
						#print "on est la "+str(s)
						#print "on est aussi la"+str(self.result_regex[0])
						
			
			
			if re.search('Bit Rates:',element):
				self.regex=re.compile('(Bit Rates):(([0-9]{1,3}\.{0,1}[0-9]{0,3} Mb/s[;\s]*)*).*')
				self.result_regex=self.regex.findall(element)
				s = ' '.join(self.result_regex[0][1].split())
				s = s.replace(';',"")
				self.dico[self.result_regex[0][0]]=s
			
			if re.search('Quality=',element):
				self.regex=re.compile('(Quality)=([0-9]{1,3}/100).*')
				self.result_regex=self.regex.findall(element)
				self.dico[self.result_regex[0][0]]=self.result_regex[0][1]
			
			if re.search('Signal level=',element):
				self.regex=re.compile('(Signal level)=(-{0,1}[0-9]{1,3} dBm).*')
				self.result_regex=self.regex.findall(element)
				self.dico[self.result_regex[0][0]]=self.result_regex[0][1]
			
			if re.search('Extra:',element):
				self.regex=re.compile('(Extra):[ ]{0,1}(.*)[\s]')
				self.result_regex=self.regex.findall(element)
				self.dico[self.result_regex[0][0]]=self.result_regex[0][1]
			
		
			self.listdico.append(self.dico)

			self.dico={}
		# cellule renvoyé a travers une liste de dictionnaire
		return self.listdico
		

					
			
		
		

		


if __name__=="__main__":

	test= IwList("un")
	test.iwList('eth1')
	#print test.result
	#print sorted(test.result.items())

	#for element in test.listdico:
	#	print element

	for element in test.listdico:
		print '\r'
		print elem

       

	
	
	
